package com.tedu.api.list;

import org.junit.Test;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * List子接口下的两个实现类：
 * 1.ArrayList实现类:数组实现---查询快,增删慢---使用集合【查询效率高】
 *
 * 链表实现集合
 * 2.LinkedList实现类:双向链表实现---查询慢,增删快---【元素多增删效率高】
 *
 * ArrayList实现类与LinkedList实现类大部分方法完全一致
 * 添加:add() 删除:remove() 获取:get() 获取集合长度:size() 清空集合:clear()
 *
 * ArrayList实现类与LinkedList实现类大部分方法不一致
 * indexOf()  lastIndexOf()LinkedList独有
 * addFirst(E e)
 * addFast(E e)
 * removeFirst()
 * removeFast()
 */
public class LinkedListAPI {
    /**
     * ArrayList  LinkedList
     * indexOf() lastIndexOf()
     */
    @Test
    public void testIndexOf() {
        List<String> listlinked = new LinkedList<>();
        listlinked.add("疾风剑豪·亚索");
        listlinked.add("封魔剑魂·永恩");
        listlinked.add("暗裔剑魔·亚托克斯");
        listlinked.add("无双剑姬·菲奥娜");
        listlinked.add("无极剑圣·易");
        /**
         * indexOf() 返回值:int类型
         * 作用:返回元素指定下标位,如果找不到,返回-1
         * List子接口方法--ArrayList.LinkedList均可以使用
         */
        int threeIndex = listlinked.indexOf("暗裔剑魔·亚托克斯"/*输出想传入的*/);
        //调用父级List的indexOf方法   多态2
        System.out.println("世界的终结者：" + threeIndex);
        /**LinkedList独有方法
         *LastIndexOf()  返回值:int
         *作用:找到最后一个元素的位置，如果元素不存在，返回-1
         */
        int lastIndex = listlinked.lastIndexOf("潮汐海灵·菲兹");
        //子集实现类LinkedList集合方法
        System.out.println("比尔吉沃特四大恐怖传说之一：" + lastIndex);

    }

    /**
     * addFirst(E e)  返回值:void(空)
     * 作用：将指定的元素添加到链表的头部
     * addFast(E e)   返回值:void(空)
     * 作用：将指定的元素添加到链表的尾部
     * removeFirst()  返回值
     * 作用:移除并返回链接的第一个元素，如果链表为空，则异常
     *      NoSuchElementException
     * removeFast()
     * 作用:移除并返回链表的最后一个元素，如果链表为空,则异常
     *      NoSuchElementException
     */
    @Test
    public void testLinkedList() {
        List<String> list = new LinkedList<>();//创建集合对象:使用多态调用父类/【子类重写了父类的方法】
        list.add("虚空之眼·维克兹");
        list.add("虚空恐惧·科加斯");
        list.add("虚空女皇·卑尔维斯");
        //子类-LinkedList没有重写父类-List的方法
        //多态---向下造型   强转   ((LinkedList)list)强转为子类
        ((LinkedList) list).addFirst("铸星龙王·奥瑞利安.索尔");
        ((LinkedList) list).addLast("星界游神·巴德");
        System.out.println("LinkedList集合打印：" +list);
        //需求：遍历LinkedList集合--Iterator迭代器
        Iterator<String> it = list.iterator();//依赖Collection集合
        //2.循环遍历,Iterator迭代器:问、取、删(选择使用)
        while (it.hasNext()) {//问:获取集合的元素
            String str=it.next();//获取集合元素
            System.out.println("迭代器支持Collection接口下的所有类：" + str);
        }
        //删除LinkedList集合元素中:抓娃娃元素
        ((LinkedList)list).removeFirst();
        System.out.println("使用链表集合删除第一个元素："+list);

        }

}
